/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamananggaranbiayagaji;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassConnection;
import org.springframework.jdbc.core.RowMapper;

/**
 *
 * @author hendro
 */
public class PerekamanAnggaranGajiDAOImpl implements PerekamanAnggaranGajiDAO {

    public PerekamanAnggaranGajiDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public void insert(PerekamanAnggaranGaji obj) throws Exception {
        String sql = "INSERT INTO ppmk.anggaranBiayaGaji(tahun,kodeUnit,idKomponen,nominalPerBulan) VALUES(?,?,?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    obj.getTahun(),
                    obj.getKodeUnit(),
                    obj.getIdKomponen(),
                    obj.getNominalPerBulan()
                });
    }

    public void update(PerekamanAnggaranGaji obj) throws Exception {
        delete(obj);
        insert(obj);
    }

    public void delete(PerekamanAnggaranGaji obj) throws Exception {
        String sql = "DELETE FROM ppmk.anggaranBiayaGaji WHERE tahun=? AND kodeUnit=? AND idKomponen=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    obj.getTahun(),
                    obj.getKodeUnit(),
                    obj.getIdKomponen()
                });
    }

    public List<PerekamanAnggaranGaji> list(String tahun) throws Exception {
        List<PerekamanAnggaranGaji> list = new ArrayList<PerekamanAnggaranGaji>();
        //String sql = "SELECT tahun, kodeUnit, idKomponen, nominalPerBulan FROM ppmk.anggaranBiayaGaji " +
        //        "WHERE tahun=?";
        String sql = "SELECT anggaranBiayaGaji.tahun, anggaranBiayaGaji.kodeUnit, anggaranBiayaGaji.idKomponen, " +
                "anggaranBiayaGaji.nominalPerBulan, komponenAnggaranBiayaGaji.adm FROM " +
                "ppmk.komponenAnggaranBiayaGaji INNER JOIN ppmk.anggaranBiayaGaji ON " +
                "(komponenAnggaranBiayaGaji.idKomponen = anggaranBiayaGaji.idKomponen) " +
                "WHERE (anggaranBiayaGaji.tahun =?);";
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql, new Object[]{
                    tahun});
        for (Map m : rows) {
            PerekamanAnggaranGaji pag = new PerekamanAnggaranGaji();
            pag.setTahun(ClassAntiNull.AntiNullString(m.get("tahun")));
            pag.setKodeUnit(ClassAntiNull.AntiNullString(m.get("kodeUnit")));
            pag.setIdKomponen(ClassAntiNull.AntiNullInt(m.get("idKomponen")));
            pag.setNominalPerBulan(ClassAntiNull.AntiNullFloat(m.get("nominalPerBulan")));
            pag.setKd_stat_edu(ClassAntiNull.AntiNullString(m.get("adm")));
            list.add(pag);
        }
        return list;
    }

    public List<GajiPegawai> listGajiPegawai() throws Exception {
        List<GajiPegawai> list = new ArrayList<GajiPegawai>();
        String sql = "SELECT Kd_stat_edu, Nm_stat_edu FROM kamus.stat_edu ORDER BY Kd_stat_edu";
        List<Map> rows = ClassConnection.getJdbc().queryForList(sql);
        for (Map m : rows) {
            GajiPegawai gp = new GajiPegawai();
            gp.setKd_stat_edu(ClassAntiNull.AntiNullString(m.get("Kd_stat_edu")));
            gp.setNm_stat_edu(ClassAntiNull.AntiNullString(m.get("Nm_stat_edu")));
            list.add(gp);
        }
        return list;
    }

    public PerekamanAnggaranGaji select(String tahun, String kodeUnit, int idKomponen) throws Exception {
        String sql = "SELECT tahun, kodeUnit, idKomponen, nominalPerBulan FROM ppmk.anggaranBiayaGaji WHERE " +
                "tahun=? AND kodeUnit=? AND idKomponen=?";
        PerekamanAnggaranGaji pag = null;
        try {
            pag = (PerekamanAnggaranGaji) ClassConnection.getJdbc().queryForObject(sql, new Object[]{
                        tahun,
                        kodeUnit,
                        idKomponen
                    }, new RowMapper() {

                public Object mapRow(ResultSet rs, int arg1) throws SQLException {
                    PerekamanAnggaranGaji pag = new PerekamanAnggaranGaji();
                    pag.setTahun(ClassAntiNull.AntiNullString(rs.getString("tahun")));
                    pag.setKodeUnit(ClassAntiNull.AntiNullString(rs.getString("kodeUnit")));
                    pag.setIdKomponen(ClassAntiNull.AntiNullInt(rs.getInt("idKomponen")));
                    pag.setNominalPerBulan(ClassAntiNull.AntiNullFloat(rs.getFloat("nominalPerbulan")));
                    return pag;
                }
            });
        } catch (Exception ex) {
            pag = null;
        }
        return pag;
    }
}
